「ちょっとメモ」
「なんだい?」
「UWPにはRenderTargetBitmapというクラスがあってコントロールをレンダリングしたビットマップを作成してくれる」
「うん」
「ところが以下のように使うとpictureの中身をレンダリングしてくれない」
ResizedImage.Source = picture;
RenderTargetBitmap RenderImage = new RenderTargetBitmap();
await RenderImage.RenderAsync(ResizedImage);
「なぜ?」
「ResizedImage.Source = picture;を実行しても、ソースが指定されるだけで即座に画面に反映されるわけではないのだ。そして、RenderAsyncメソッドは今現在画面に見えているものをビットマップにレンダリングする」
「つまり、非同期で動作するから完了を待たずにレンダリングしても意味が無いわけだね」
「そうだ」
「じゃあさ。レンダリングの終了イベントを受け取ってから実行すればいいじゃないか」
「実は、ロード終了を示すイベントまでは把握できたが、既に読み込み済みの画像オブジェクトをソースに指定する場合はイベントが起きないようだ」
「じゃあ、どれを使えばいいの?」
「分からない。分からないので、取りあえず問題をメモだ」
暫定解決策 §
「暫定的には以下の箇所に時間待ちを入れると動く」
「どれぐらい?」
「100ms待たせれば動いたが、それははたして全てのマシンで有効な値か分からない」
「じゃあどう解決した」
「取りあえずボタン押すのを待たせたよ」
ResizedImage.Source = picture;
(時間待ち)
RenderTargetBitmap RenderImage = new RenderTargetBitmap();
await RenderImage.RenderAsync(ResizedImage);